맨위로가기

유닉스 셸

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

유닉스 셸은 사용자와 운영 체제 간의 인터페이스 역할을 하는 명령 줄 인터프리터 프로그램이다. 켄 톰슨의 톰슨 셸(sh)을 시작으로, 본 셸, C 셸, 콘 셸, 배시, Z 셸 등 다양한 종류가 존재하며, 각 셸은 고유한 문법과 특징을 가진다. 셸은 변수 할당, 명령어 실행, 시스템 시작 스크립트 구현 등 다양한 역할을 수행하며, 사용자가 시스템에 로그인하면 자동으로 실행된다.

더 읽어볼만한 페이지

  • 유닉스 셸 - 유닉스 계열
    유닉스 계열은 유닉스 운영체제의 특징과 설계를 공유하는 운영체제들을 지칭하며, 유전적, 상표, 기능적 유닉스로 분류되고 macOS는 상표 유닉스이자 유전적 유닉스에 해당하며 리눅스는 기능적 유닉스의 대표적인 예이다.
  • 유닉스 셸 - 본 셸
    본 셸은 스티븐 본이 개발하여 1979년 유닉스에 포함된 셸로, 셸 스크립트, 제어 흐름, 변수, 시그널 처리 등의 기능을 제공하며 여러 셸에 영향을 주었고 현재도 널리 사용된다.
  • 시스템 관리 - 슈퍼유저
    슈퍼유저는 운영 체제에서 모든 권한을 가진 사용자를 지칭하며, 유닉스 계열에서는 root, 윈도우에서는 관리자 계정이 해당 역할을 수행한다.
  • 시스템 관리 - 시스템 관리자
    시스템 관리자는 컴퓨터 시스템과 사용 방식을 이해하고 관리하며, 안정적인 운영을 책임지고 문제 해결, 사용자 계정 및 보안 관리, 시스템 구성 문서화, 성능 튜닝, 하드웨어 및 소프트웨어 설치, 네트워크 인프라 관리, 사용자 교육 등을 수행한다.
유닉스 셸
개요
유형명령어 줄 인터프리터
다른 이름명령어 언어 인터프리터
사용 운영 체제유닉스 계열 운영 체제
최초 출시1971년
개발자켄 톰슨 (최초 셸)
스티븐 본 (본 셸)
빌 조이 (C 셸)
데이비드 콘 (콘 셸)
브라이언 폭스 (배시)
폴 팔스타드 (Z 셸)
구현 언어C 언어
유형소프트웨어
상세 정보
기능명령어 줄 인터페이스 제공
셸 스크립트 실행
명령어 대체 지원
파이프라인 지원
와일드카드 문자를 이용한 파일 이름 확장
환경 변수 관리
명령어 히스토리 관리
작업 제어
일반적인 셸본 셸 (`sh`)
배시 (`bash`)
C 셸 (`csh`)
K 셸 (`ksh`)
Z 셸 (`zsh`)
역사
기원최초의 유닉스 셸은 켄 톰슨이 개발함 (1971년)
스티븐 본이 본 셸 개발 (1979년, Version 7 Unix에 포함)
주요 셸 발전C 셸: 빌 조이가 개발, C 언어 스타일 문법 도입
콘 셸: 데이비드 콘이 개발, 다양한 기능 추가 (명령어 히스토리, 편집 기능 등)
배시: 브라이언 폭스가 개발, GNU 프로젝트의 일부로 개발, 본 셸 호환
Z 셸: 폴 팔스타드가 개발, 다양한 기능과 사용자 정의 기능 제공
특징
명령어 해석기사용자가 입력한 명령어를 해석하고 실행하는 역할
스크립트 언어일련의 명령어를 파일에 저장하여 실행 가능 (셸 스크립트)
프로그래밍 기능변수, 조건문, 반복문 등 기본적인 프로그래밍 기능 제공
파이프라인명령어들을 연결하여 데이터 흐름을 제어
리다이렉션명령어의 입출력을 변경
백그라운드 실행명령어를 백그라운드에서 실행하여 다른 작업 수행 가능
작업 제어실행 중인 작업 일시 중지, 재개, 종료 가능
예시
명령어 실행`ls -l` (현재 디렉토리의 파일 목록을 자세히 표시)
스크립트 실행`sh script.sh` (script.sh 파일을 셸 스크립트로 실행)
파이프라인`cat file.txt | grep "keyword"` (file.txt 파일에서 "keyword"를 포함하는 줄을 검색)
참고 자료
관련 링크POSIX 셸 및 유틸리티
GNU Bash 홈페이지
Zsh 홈페이지

2. 역사

셸의 역사는 유닉스 운영 체제의 발전과 함께 한다.

초기 유닉스 셸 중에서 가장 널리 배포되었고 영향력이 컸던 셸은 본 셸C 셸이었다. 두 셸 모두 확장된 기능 세트를 가진 많은 파생 셸 및 유사 셸의 코딩 기반 및 모델로 사용되었다.[5]

넓은 의미로 「셸」은 사용자가 명령어를 입력하기 위해 사용하는 프로그램을 말한다. 유닉스 계열 OS에서는 대화형 세션을 위한 명령 줄 인터페이스에 다양한 선택지가 있다. 사용자가 시스템에 로그인하면 (GUI 환경이 아닌 경우) 셸 프로그램이 자동으로 실행된다. 이 로그인 셸은 사용자마다 다르게 지정할 수 있다. `passwd` 파일에서 실행할 셸 프로그램을 지정할 수 있으며, `passwd -e` 명령 또는 chsh|체인지 셸영어 명령으로 변경할 수도 있다. 또한, 사용자는 다른 셸 프로그램을 대화형으로 실행할 수도 있다.

유닉스 셸이 등장했을 당시, 이러한 프로그램은 드물었다. 대화형 명령어 언어인 동시에 스크립트 언어로도 사용될 수 있으며, 시스템 제어 시설로서 OS 자체도 그 스크립트를 사용하고 있다. 셸의 개념은 유닉스 외에도 널리 퍼져나갔다.

윈도우 시스템을 가진 시스템에서는 사용자가 셸을 직접 사용하지 않는 경우도 많다. 유닉스 계열 OS에서는 시스템 시작 스크립트 그룹이 셸 스크립트로 작성되어 있으며, 윈도우 시스템의 시작, 인터넷 접근을 위한 프로그램 시작, 그 외 다양한 기능의 시작도 그러한 스크립트로 수행한다.

2. 1. 초기 셸

톰프슨 셸(sh)은 벨 연구소의 켄 톰슨이 작성한 최초의 유닉스 셸이다.[2] 1971년부터 1975년까지 유닉스 버전 1부터 6까지 배포되었다.[2] 현대적인 기준으로는 조잡하지만, 파이핑, `if`와 `goto`를 사용한 간단한 제어 구조, 파일 이름 와일드카드 등 이후 모든 유닉스 셸에 공통적으로 적용되는 많은 기본 기능을 도입했다. 현재는 잘 사용되지 않지만, 일부 고대 유닉스 시스템에서 찾아볼 수 있다.

톰슨 셸은 글렌다 슈뢰더가 개발한 멀틱스 셸을 모델로 했다.[3][4]

PWB 셸 또는 매시 셸(Mashey shell) (sh)은 톰슨 셸을 개선한 버전으로, 존 매시 등이 1975년에서 1977년경 프로그래머 작업대 유닉스와 함께 배포했다. 셸 변수, 사용자 실행 셸 스크립트, 인터럽트 처리가 추가되었고, 제어 구조가 확장되었다.

본 셸(sh)은 벨 연구소의 스티븐 본이 개발한 새로운 유닉스 셸이다.[6] 1979년 UNIX 버전 7의 셸로 배포되었으며, 히어 문서, 명령 치환, 더 일반적인 변수, 그리고 더 광범위한 내장 제어 구조를 포함하여 이후의 모든 유닉스 셸에서 공통적으로 사용되는 나머지 기본 기능을 도입했다.[7] ALGOL 68의 영향을 받았다.[7] 일반적으로 본 셸 프로그램 이름은 `sh`이며 유닉스 파일 시스템 계층에서의 경로는 `/bin/sh`이다. 많은 시스템에서 `sh`는 이러한 대안 중 하나에 대한 심볼릭 링크 또는 하드 링크일 수 있다.

C 셸(csh)은 빌 조이캘리포니아 대학교 버클리의 대학원생 시절에 작성했으며, BSD 유닉스와 함께 널리 배포되었다.[9] C 프로그래밍 언어를 모델로 했다. history 및 editing 메커니즘, 별칭 등 대화형 작업을 위한 많은 기능을 도입했다. 많은 시스템에서 `csh`는 TENEX C 셸(tcsh)에 대한 심볼릭 링크 또는 하드 링크일 수 있다.

3. 종류

유닉스 셸에는 여러 종류가 있으며, 크게 본 셸 호환 계열과 C 셸 호환 계열로 나눌 수 있다.

본 셸(sh)은 벨 연구소의 스티븐 본이 개발했으며, 1979년 UNIX 버전 7의 셸로 배포되었다.[6] 이후 모든 유닉스 셸에서 공통적으로 사용되는 여러 기능을 도입했다. 알름퀴스트 셸(ash)은 본 셸을 대체하기 위해 BSD 라이선스로 작성되었으며, 리소스가 제한된 환경에서 자주 사용된다. Busybox는 소형 및 임베디드 시스템용 유닉스 유틸리티 모음으로, ash 파생 제품과 본 셸의 독립적인 구현인 hush, 두 개의 셸을 포함한다. POSIX 표준은 표준 셸을 콘 셸의 엄격한 하위 집합으로 지정한다. 본 셸은 특징적인 기본 명령줄 프롬프트 문자인 달러 기호($)로 활성화되었을 때 즉시 인식되었다.

C 셸(csh)은 C 프로그래밍 언어의 제어 구조와 표현식 문법을 모델로 했다. 빌 조이캘리포니아 대학교 버클리 대학원생 시절에 작성했으며, BSD 유닉스와 함께 널리 배포되었다.[9]

3. 1. 본 셸 호환


  • 본 셸(sh): 스티븐 본이 벨 연구소에서 개발했다. 1979년 UNIX 버전 7의 셸로 배포되었으며, 이후 모든 유닉스 셸의 기본 기능을 도입했다.[6]
  • 암키스트 셸(ash): 본 셸의 BSD 라이선스 버전으로, 리소스가 제한된 환경에서 자주 사용된다.
  • * 데비안 암키스트 셸(dash): 데비안 및 우분투에서 ash를 대체하는 현대적인 셸이다.
  • 본 어게인 셸(bash): GNU 프로젝트의 일환으로 작성되었으며 본 셸 기능의 상위 집합을 제공한다. 대부분의 리눅스 시스템에서 기본 셸로 사용된다.
  • 콘 셸(ksh): 데이비드 콘벨 연구소에서 본 셸 소스를 기반으로 작성했다.[8]
  • * 퍼블릭 도메인 콘 셸(pdksh)
  • ** MirBSD 콘 셸(mksh): OpenBSD /bin/ksh 및 pdksh의 후손이다.
  • Z 셸(zsh): bash와 하위 호환되는 비교적 현대적인 셸이다. Catalina 이후 macOS의 기본 셸이다.

3. 2. C 셸 호환

C 셸(csh)은 C 프로그래밍 언어를 모델로 하여 제어 구조와 표현식 문법을 갖추었다. 빌 조이캘리포니아 대학교 버클리 대학원생 시절에 작성했으며, BSD 유닉스와 함께 널리 배포되었다.[9]

C 셸은 history, editing 메커니즘, 별칭, 디렉토리 스택, 틸드 표기법, cdpath, 작업 제어, 경로 해싱 등 대화형 작업을 위한 여러 기능을 도입했다.[9] 많은 시스템에서 csh는 빌 조이의 오리지널 버전을 개선한 TENEX C 셸(tcsh)에 대한 심볼릭 링크 또는 하드 링크이다. csh의 대화형 기능은 다른 대부분의 셸에 복사되었지만, 언어 구조는 널리 복사되지 않았다. 유일하게 유사한 제품은 1988년 OS/2에서 처음 배포되고 1992년부터 Windows에서 배포된, 니콜 해밀턴이 작성한 해밀턴 C 셸이다.[10]

3. 3. 기타 셸


  • fish: 2005년에 처음 출시되었다.
  • rc: 톰 더프가 작성한 Plan 9 from Bell Labs 및 Version 10 Unix의 기본 셸이다. 다양한 유닉스 계열 운영 체제로 포팅되었다.
  • scsh: Scheme 셸이다.
  • es: 1990년대 중반에 작성된 함수형 프로그래밍 rc 호환 셸이다.[15]
  • PowerShell: 원래 Windows OS용으로 개발되었으며 현재 macOS 및 Linux에서도 사용 가능한 객체 지향 셸이다.
  • Qshell: POSIXX/Open 표준을 기반으로 하는 IBM i 운영 체제의 셸이다.
  • wish: Tcl/Tk용 윈도우 셸이다.
  • (psh): 유닉스 계열 및 윈도우용 셸로, bash와 의 기능을 통합했다.
  • pysh: IPython 프로젝트의 특수 프로파일로, 파이썬용 셸과 시스템용 셸을 매끄럽게 통합한다.[22]
  • zoidberg: 만으로 작성된 모듈화된 셸이다.[23]

4. 구성 파일

셸은 다양한 상황에서 구성 파일을 읽어 들이는데, 자세한 내용은 셸의 종류에 따라 다르다. 설정 파일에는 해당 셸에 맞는 명령어들이 적혀 있으며, 로드와 동시에 실행된다. 실행 파일의 검색 경로를 지정하는 `$PATH`와 같은 중요한 변수를 설정하거나, 셸의 동작 및 모양을 제어하는 변수를 설정하기도 한다. 다음 표는 대표적인 유닉스 셸의 설정 파일에 대해 정리한 것이다.

shkshcshtcshbashzsh
/etc/.loginloginlogin
/etc/csh.cshrcyesyes
/etc/csh.loginloginlogin
~/.tcshrcyes
~/.cshrcyesyes[24]
~/.loginloginlogin
~/.logoutloginlogin
/etc/profileloginloginloginlogin
~/.profileloginloginlogin[25]login
~/.bash_profilelogin[25]
~/.bash_loginlogin[25]
~/.bash_logoutlogin
~/.bashrcint.+n/login
/etc/zshenvyes
/etc/zprofilelogin
/etc/zshrcint.
/etc/zloginlogin
/etc/zlogoutlogin
~/.zshenvyes
~/.zprofilelogin
~/.zshrcint.
~/.zloginlogin
~/.zlogoutlogin



범례:


  • 빈 칸은 해당 셸에서 해당 파일을 전혀 읽지 않음을 의미한다.
  • "yes" - 해당 셸의 시작 시 항상 읽는다.
  • "login" - 해당 셸이 로그인 셸인 경우 읽는다.
  • "n/login" - 해당 셸이 로그인 셸이 아닌 경우 시작 시 읽는다.
  • "int." - 대화형 셸로 시작한 경우 읽는다.

5. 문법

셸은 고유한 문법을 가지고 있으며, 이를 통해 변수 할당, 명령어 실행 등을 수행한다.

변수 할당은 `=` 기호를 사용한다. 변수명과 값 사이에는 공백이 없어야 한다.
예시:```text

ping=pong

echo $ping

6. 개념

넓은 의미에서 셸은 명령어 입력을 위해 사용자가 사용하는 프로그램이다. 유닉스 계열 운영 체제에서는 다양한 명령 줄 인터페이스를 선택할 수 있다. 사용자가 로그인하면 셸 프로그램이 자동으로 실행되며, 사용자별로 셸을 설정할 수 있다. 셸은 시스템 시작 스크립트의 구현 언어로 사용될 수 있다.[1]

일반적으로 '셸'은 텍스트 명령에 응답하여 다른 프로그램을 실행하는 프로그램이다. 정교한 셸은 이름 지정된 변수, 매개변수 목록 또는 입력 소스를 전달하여 다른 프로그램이 실행되는 환경을 변경할 수도 있다.[1]

유닉스 계열 운영 체제에서 사용자는 대화형 세션을 위해 다양한 명령줄 인터프리터를 선택할 수 있다. 사용자가 시스템에 로그인하면 세션 동안 셸 프로그램이 자동으로 실행된다. 각 사용자에 맞게 사용자 정의할 수 있는 셸의 유형은 일반적으로 사용자의 프로필에 저장된다. 예를 들어 로컬 passwd 파일이나 네트워크 정보 서비스 또는 경량 디렉터리 액세스 프로토콜과 같은 분산 구성 시스템에 저장된다. 그러나 사용자는 다른 사용 가능한 셸을 대화식으로 실행할 수 있다.[1]

macOS 및 데스크톱 리눅스 배포판과 같은 윈도잉 시스템이 있는 운영 체제에서 일부 사용자는 셸을 직접 사용하지 않을 수 있다. 유닉스 시스템에서 셸은 역사적으로 윈도잉 시스템을 시작하고, 네트워킹을 구성하며, 기타 많은 필수 기능을 시작하는 프로그램을 포함하여 시스템 시작 스크립트의 구현 언어였다. 그러나 일부 시스템 공급업체는 기존의 셸 기반 시작 시스템(init)을 systemd와 같은 다른 접근 방식으로 대체했다.[1]

「셸」을 가장 넓은 의미로 보면, 명령어를 입력하기 위해 사용자가 사용하는 프로그램이라고 할 수 있다. 유닉스 계열 OS에서는, 대화형 세션을 위한 명령 줄 인터페이스에는 다양한 선택지가 있다. 사용자가 시스템에 로그인하면 (GUI 환경이 아닌 경우) 셸 프로그램이 자동으로 실행 시작된다. 이 로그인 셸은 사용자마다 사용자 정의할 수 있다. passwd 파일에서 실행할 셸 프로그램을 지정할 수 있으며, passwd -e 명령 또는 chsh|chsh영어 명령으로 변경할 수도 있다. 또한, 사용자는 다른 셸 프로그램을 대화형으로 실행할 수도 있다.[2]

유닉스 셸이 등장했을 당시, 이러한 프로그램은 드물었다. 대화형 명령어 언어인 동시에 스크립트 언어로도 사용될 수 있으며, 시스템 제어 시설로서 OS 자체도 그 스크립트를 사용하고 있다. 셸의 개념은 유닉스 외에도 널리 퍼져나갔다.[2]

윈도우 시스템을 가진 시스템에서는, 사용자가 셸을 직접 사용하지 않는 경우도 많다. 유닉스 계열 OS에서는, 시스템 시작 스크립트 그룹이 셸 스크립트로 작성되어 있으며, 윈도우 시스템의 시작도 인터넷에의 접근을 위한 프로그램 시작도 그 외 다양한 기능의 시작도 그러한 스크립트로 수행한다.[2]

참조

[1] 뉴스 The Unix Shell https://archive.org/[...] 1983-10-01
[2] 웹사이트 V6 Thompson Shell Port - History http://v6shell.org/h[...] V6shell.org 2012-08-14
[3] 웹사이트 Unix and Multics http://www.multician[...] Multicians.org 1995-02-05
[4] 웹사이트 The Origin of the Shell http://www.multician[...] Multicians.org 2000-11-25
[5] 웹사이트 Introduction to the Unix shell history http://www.softpanor[...] Softpanorama 2015-08-13
[6] 인터뷰 The A-Z of Programming Languages: Bourne shell, or sh https://www2.compute[...] Computerworld 2009-03-05
[7] 웹사이트 'Re: Late Bloomers Revisited' http://groups.google[...]
[8] 논문 ksh - An Extensible High Level Language https://www.usenix.o[...] USENIX Association 1994-10-26
[9] 웹사이트 Harley Hahn's Guide to Unix and Linux: Unix/Linux Timeline https://www.harley.c[...]
[10] 웹사이트 Hamilton C shell for Windows Release Notes 4.0 http://hamiltonlabs.[...]
[11] 웹사이트 Different UNIX Shells http://www.unixnote.[...] unixnote.com 2010-01-01
[12] 웹사이트 SCO Unixware 7 documentation http://unix.harley.c[...] SCO Unix Group 2004-04-22
[13] 웹사이트 Shell Command Language http://pubs.opengrou[...]
[14] 웹사이트 Bash Reference Manual: Bash Startup Files https://www.gnu.org/[...]
[15] 웹사이트 FreeBSD Ports: Shells http://www.freebsd.o[...] Freebsd.org 2014-03-30
[16] 뉴스 Re: Late Bloomers Revisited https://groups.googl[...] 1989-12-17
[17] 웹사이트 The MiriBSD Korn Shell https://www.mirbsd.o[...] MirOS
[18] 웹사이트 Use zsh as the default shell on your Mac - Apple Support https://support.appl[...] Apple
[19] 웹사이트 Harley Hahn's Guide to Unix and Linux http://unix.harley.c[...]
[20] 웹사이트 Hamilton C shell for Windows Release Notes 4.0 http://hamiltonlabs.[...]
[21] 웹사이트 es-shell https://code.google.[...] Google Code
[22] 웹사이트 pysh http://sourceforge.j[...] Sourceforge.jp
[23] 웹사이트 Zoidberg http://search.cpan.o[...] CPAN
[24] 문서 ~/.tcshrc 가 발견되지 않은 경우에만
[25] 문서 실제로는 ~/.bash_profile, ~/.bash_login, ~/.profile 순서로 처음 읽을 수 있는 파일만 읽습니다. sh로 호출된 경우에는 ~/.profile만 읽습니다.
[26] 문서 only if ~/.tcshrc not found
[27] 문서 in fact, the first readable of ~/.bash_profile, ~/.bash_login and ~/.profile; and only ~/.profile if invoked as sh



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com